//
//  XMFilterView.m
//  XMFilterView
//
//  Created by mac on 2019/11/21.
//  Copyright © 2019 aishangliguo. All rights reserved.
//

#import "XMFilterView.h"

//#import "XMFilterTableCell.h"
//
//static NSString *const cellID = @"cellID";
//
//@interface XMFilterView () <UITableViewDelegate, UITableViewDataSource, XMFilterTableCellDelegate>
//
//@property (nonatomic, assign) NSInteger selectRow;
//
//@end
//
//@implementation XMFilterView
//
//- (instancetype)initWithFrame:(CGRect)frame {
//    if (self = [super initWithFrame:frame]) {
//        [self addSubview:self.tableView];
//        self.filterDict = [NSMutableDictionary dictionary];
//    }
//
//    return self;
//}
//
//- (void)layoutSubviews {
//    [super layoutSubviews];
//    self.tableView.frame = self.bounds;
//}
//
//- (void)cellFileterButton:(XMFilterTableCell *)cell {
//    cell.isFilterSelect = !cell.isFilterSelect;
//    long row = [self.tableView indexPathForCell:cell].row;
//
////    [self.filterDict enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
////        if ([key isEqualToString:[NSString stringWithFormat:@"%ld",(long)row]]) {
////            [self.filterDict setObject:@"select" forKey:key];
////        }
////        if ([obj isEqualToString:@"select"]) {
////            [self.filterDict setObject:@"noSelect" forKey:key];
////        }
////    }];
//
//    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:row inSection:0];
//    [self.tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationFade];
//
//}
//
//- (void)setDataSource:(NSArray *)dataSource {
//    _dataSource = dataSource;
//    [dataSource enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
//        [self.filterDict setObject:@"noSelect" forKey:[NSString stringWithFormat:@"%ld",idx]];
//    }];
//}
//
////- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
////    __block int height = 100;
////    [self.filterDict enumerateKeysAndObjectsUsingBlock:^(NSString * _Nonnull key, NSString * _Nonnull obj, BOOL * _Nonnull stop) {
////        if ([obj isEqualToString:@"select"] && indexPath.row == self.selectRow) {
////            height = 150;
////            height = 200;
////        }
////    }];
////    return height;
////}
//
////- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
////    return 2;
////}
//
//- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
//    return self.dataSource.count;
//}
//
//- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
//    // 圆角弧度半径
//    CGFloat cornerRadius = 6.f;
//    // 设置cell的背景色为透明，如果不设置这个的话，则原来的背景色不会被覆盖
//    self.backgroundColor = UIColor.clearColor;
//
//    // 创建一个shapeLayer
//    CAShapeLayer *layer = [[CAShapeLayer alloc] init];
//    CAShapeLayer *backgroundLayer = [[CAShapeLayer alloc] init]; //显示选中
//    // 创建一个可变的图像Path句柄，该路径用于保存绘图信息
//    CGMutablePathRef pathRef = CGPathCreateMutable();
//    // 获取cell的size
//    // 第一个参数,是整个 cell 的 bounds, 第二个参数是距左右两端的距离,第三个参数是距上下两端的距离
//    CGRect bounds = CGRectInset(self.bounds, 10, 0);
//
//    // CGRectGetMinY：返回对象顶点坐标
//    // CGRectGetMaxY：返回对象底点坐标
//    // CGRectGetMinX：返回对象左边缘坐标
//    // CGRectGetMaxX：返回对象右边缘坐标
//    // CGRectGetMidX: 返回对象中心点的X坐标
//    // CGRectGetMidY: 返回对象中心点的Y坐标
//
//    // 这里要判断分组列表中的第一行，每组section的第一行，每组section的中间行
//
//    // CGPathAddRoundedRect(pathRef, nil, bounds, cornerRadius, cornerRadius);
//    if (indexPath.row == 0) {
//        // 初始起点为cell的左下角坐标
//        CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds));
//        // 起始坐标为左下角，设为p，（CGRectGetMinX(bounds), CGRectGetMinY(bounds)）为左上角的点，设为p1(x1,y1)，(CGRectGetMidX(bounds), CGRectGetMinY(bounds))为顶部中点的点，设为p2(x2,y2)。然后连接p1和p2为一条直线l1，连接初始点p到p1成一条直线l，则在两条直线相交处绘制弧度为r的圆角。
//        CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds), CGRectGetMidX(bounds), CGRectGetMinY(bounds), cornerRadius);
//        CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
//        // 终点坐标为右下角坐标点，把绘图信息都放到路径中去,根据这些路径就构成了一块区域了
//        CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds));
//        CGPathAddLineToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds));
//
//    } else if (indexPath.row == self.dataSource.count - 1) {
//        // 初始起点为cell的左上角坐标
//        CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds));
//        CGPathAddArcToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds), CGRectGetMidX(bounds), CGRectGetMaxY(bounds), cornerRadius);
//        CGPathAddArcToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds), CGRectGetMaxX(bounds), CGRectGetMidY(bounds), cornerRadius);
//        // 添加一条直线，终点坐标为右下角坐标点并放到路径中去
//        CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds));
//    } else {
//        // 添加cell的rectangle信息到path中（不包括圆角）
//        //假如用填充色，用这个
//        //        CGPathAddRect(pathRef, nil, bounds);
//
//        //假如只要边框
//        CGPathMoveToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMinY(bounds));
//        CGPathAddLineToPoint(pathRef, nil, CGRectGetMinX(bounds), CGRectGetMaxY(bounds));
//        CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMaxY(bounds));
//        CGPathAddLineToPoint(pathRef, nil, CGRectGetMaxX(bounds), CGRectGetMinY(bounds));
//
//    }
//    // 把已经绘制好的可变图像路径赋值给图层，然后图层根据这图像path进行图像渲染render
//    layer.path = pathRef;
//    backgroundLayer.path = pathRef;
//    // 注意：但凡通过Quartz2D中带有creat/copy/retain方法创建出来的值都必须要释放
//    CFRelease(pathRef);
//    // 按照shape layer的path填充颜色，类似于渲染render
//    // layer.fillColor = [UIColor colorWithWhite:1.f alpha:0.8f].CGColor;
//    layer.strokeColor = [UIColor lightGrayColor].CGColor;
//    layer.fillColor = [UIColor clearColor].CGColor;
//
//    // view大小与cell一致
//    UIView *roundView = [[UIView alloc] initWithFrame:bounds];
//    // 添加自定义圆角后的图层到roundView中
//    [roundView.layer insertSublayer:layer atIndex:0];
//    roundView.backgroundColor = UIColor.clearColor;
//    // cell的背景view
//    cell.backgroundView = roundView;
//
//    // 以上方法存在缺陷当点击cell时还是出现cell方形效果，因此还需要添加以下方法
//    // 如果你 cell 已经取消选中状态的话,那以下方法是不需要的.
//    UIView *selectedBackgroundView = [[UIView alloc] initWithFrame:bounds];
//    backgroundLayer.fillColor = [UIColor lightGrayColor].CGColor;
//    [selectedBackgroundView.layer insertSublayer:backgroundLayer atIndex:0];
//    selectedBackgroundView.backgroundColor = UIColor.clearColor;
//    cell.selectedBackgroundView = selectedBackgroundView;
//}
//
//- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
//     XMFilterTableCell *cell = [[XMFilterTableCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellID];
//    cell.delegate = self;
//    cell.filterTitle.text = self.dataSource[indexPath.row][@"title"];
//    cell.filterData = self.dataSource[indexPath.row][@"name"];
//    cell.clipsToBounds = YES;
//    cell.backgroundColor = [UIColor whiteColor];
//    return cell;
//}
//
//- (UITableView *)tableView {
//    if (!_tableView) {
//        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:UITableViewStylePlain];
//        _tableView.backgroundColor = [UIColor whiteColor];
//        _tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero];
//        _tableView.delegate = self;
//        _tableView.dataSource = self;
//        [_tableView registerClass:[XMFilterTableCell class] forCellReuseIdentifier:cellID];
//        _tableView.estimatedRowHeight = 200.f;
//        _tableView.rowHeight = UITableViewAutomaticDimension;
//    }
//    return _tableView;
//}
//
//@end

// Model
#import "XMTitleModel.h"

// View
#import "XMFilterCollectionCell.h"
#import "XMHeaderReusableView.h"

static NSString *const cellID = @"cellID";
static NSString *const XMCollectionHeaderReusableView = @"XMCollectionHeaderReusableView";

@interface XMFilterView ()<UICollectionViewDelegate, UICollectionViewDataSource, UICollectionViewDelegateFlowLayout>

@property (nonatomic, strong) UICollectionView *filterCollectionView;

@property (nonatomic, strong) NSMutableArray<XMTitleModel *> *listArray;

@end

@implementation XMFilterView

- (instancetype)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        [self addSubview:self.filterCollectionView];
        [self.filterCollectionView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.left.right.bottom.top.mas_equalTo(self).offset(0);
        }];

    }
    return self;
}

- (void)setDataSource:(NSArray *)dataSource {
    _dataSource = dataSource;
    for (NSDictionary *dict in dataSource) {
        XMTitleModel *title = [[XMTitleModel alloc] initWithTitleDict:dict];
        [self.listArray addObject:title];
    }
}

- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView {
    return self.listArray.count;
}

- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section {
    
    NSInteger doubleLine = (self.listArray[section].name.count >= 6) ? 6 :  self.listArray[section].name.count; //默认两行
    NSInteger oneLine = (self.listArray[section].name.count >= 3) ? 3 : self.listArray[section].name.count; //默认一行
    
    //这里默认第一组品牌展示两行数据其余展示一行数据（3个一行）
    return (self.listArray[section].isOpen == YES) ? self.listArray[section].name.count : (section == 0) ? doubleLine : oneLine ;
}

- (UIEdgeInsets)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout insetForSectionAtIndex:(NSInteger)section {
    return UIEdgeInsetsMake(20, 20, 20, 20);
}

// 不设置头部高度无法显示
- (CGSize)collectionView:(UICollectionView *)collectionView layout:(UICollectionViewLayout*)collectionViewLayout referenceSizeForHeaderInSection:(NSInteger)section {
    return CGSizeMake(kSCREEN_WIDTH, 50);
}

- (UICollectionReusableView *)collectionView:(UICollectionView *)collectionView viewForSupplementaryElementOfKind:(NSString *)kind atIndexPath:(NSIndexPath *)indexPath {
    
    UICollectionReusableView *reusableview = nil;
    if ([kind isEqualToString:UICollectionElementKindSectionHeader]) {
         XMHeaderReusableView *headerView = [collectionView dequeueReusableSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:XMCollectionHeaderReusableView forIndexPath:indexPath];
        headerView.headerTitle = self.listArray[indexPath.section];
        __weak typeof(self) weakSelf = self;
        headerView.btnClick = ^{
            weakSelf.listArray[indexPath.section].isOpen = !weakSelf.listArray[indexPath.section].isOpen;
            [weakSelf.filterCollectionView reloadData];
        };
        reusableview = headerView;
    }
    return reusableview;
    
}

- (__kindof UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
    XMFilterCollectionCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:cellID forIndexPath:indexPath];
    cell.backgroundColor = [UIColor lightGrayColor];
    cell.nameModel = self.listArray[indexPath.section].name[indexPath.item];
    return cell;
}

- (NSMutableArray *)listArray {
    if (!_listArray) {
        _listArray = [NSMutableArray array];
    }
    return _listArray;
}

- (UICollectionView *)filterCollectionView {
    if (!_filterCollectionView) {
        UICollectionViewFlowLayout *flowLayout = [[UICollectionViewFlowLayout alloc] init];
        flowLayout.scrollDirection = UICollectionViewScrollDirectionVertical;
        flowLayout.minimumLineSpacing = 15;
        flowLayout.minimumInteritemSpacing = 15;
        flowLayout.itemSize = CGSizeMake((kSCREEN_WIDTH - 114) / 3, 35);
        _filterCollectionView = [[UICollectionView alloc] initWithFrame:CGRectZero collectionViewLayout:flowLayout];
        _filterCollectionView.delegate = self;
        _filterCollectionView.dataSource = self;
        _filterCollectionView.backgroundColor = [UIColor whiteColor];
        [_filterCollectionView registerClass:[XMFilterCollectionCell class] forCellWithReuseIdentifier:cellID];
        [_filterCollectionView registerClass:[XMHeaderReusableView class] forSupplementaryViewOfKind:UICollectionElementKindSectionHeader withReuseIdentifier:XMCollectionHeaderReusableView];
    }
    return _filterCollectionView;
}

@end
